namespace NetFx.MSIL
{
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Reflection;
  using System.Reflection.Emit;

  public enum CustomModifierType
  {
    Unknown = 0x00,
    Required = 0x1f,
    Optional = 0x20,
  }
  public class CustomModifierSignature : Signature
  {
    #region Statics
    public static CustomModifierSignature of(CustomModifierType type, byte indexType, int index)
    {
      return new CustomModifierSignature(type, indexType, index);
    }
    #endregion
    #region Fields
    protected CustomModifierType type = CustomModifierType.Optional;
    protected byte indexType = 0;
    protected int index = 0;
    #endregion
    #region Properties
    public virtual CustomModifierType Type
    {
      get
      {
        return this.type;
      }
    }
    public virtual byte IndexType
    {
      get
      {
        return this.indexType;
      }
    }
    public virtual int Index
    {
      get
      {
        return this.index;
      }
    }
    #endregion
    #region Constructors
    public CustomModifierSignature(CustomModifierType type, byte indexType, int index)
    {
      this.type = type;
      this.indexType = indexType;
      this.index = index;

    }
    #endregion
  }

}
